package br.com.velp.sudecap.mb.empreendimento;

import br.com.velp.sudecap.comum.BaseController;
import br.com.velp.sudecap.comum.InterfaceCadastro;
import br.com.velp.sudecap.comum.ValidationException;
import br.com.velp.sudecap.entidade.Empreendimento;
import br.com.velp.sudecap.enumerator.PaginaEnum;
import br.com.velp.sudecap.enumerator.SituacaoEmpreendimentoEnum;
import br.com.velp.sudecap.service.EmpreendimentoService;
import br.com.velp.sudecap.web.util.MensagemUtil;
import java.util.Date;
import java.util.List;
import javax.faces.model.SelectItem;
import org.lindbergframework.spring.scope.AccessScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.10.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisito_afetado> RF003.02 - Cadastrar Empreendimentos </requisito_afetado>
 * <descricao> Managead Bean responsável por controlar as operações de
 *             Inclusão/Alteração/Detalhamento de Empreendimentos </descricao>
 * </sumario>
 */
@Controller("manterEmpreendimento")
@AccessScoped
public class ManterEmpreendimento extends BaseController implements InterfaceCadastro {

    public static final Long serialVersionUID = 1L;
    
    private List<SelectItem> listaRegionais;
    private List<SelectItem> listaProgramas;
    private List<SelectItem> listaSituacoes;
    private Empreendimento empreendimento;
    private Long idEmpreendimento;
    private boolean isDetalhamento;
    
    @Autowired
    private EmpreendimentoService empreendimentoService;

    @Override
    public String setup() {

	this.empreendimento = new Empreendimento();
	this.empreendimento.setDataCadastro(new Date());
	this.isDetalhamento = false;

	inicializarCombos();

	return PaginaEnum.MANTER_EMPREENDIMENTO.getValue();

    }

    @Override
    public String editSetup() {

	String pagina = setup();

	this.empreendimento = this.empreendimentoService.obterPorId(this.idEmpreendimento);
	this.empreendimento.setDataAlteracao(new Date());

	return pagina;

    }

    @Override
    public String detalhar() {

	String pagina = editSetup();
	this.isDetalhamento = true;

	return pagina;

    }

    @Override
    public String salvar() throws Exception {
	
	try {
	    
	    if (this.empreendimento.getId() == null) {
		this.empreendimento.setDataCadastro(new Date());
		this.empreendimento.setIdUsuarioCadastro(getContexto().getUsuario().getId());
		Long id = this.empreendimentoService.salvar(this.empreendimento);
		this.empreendimento.setId(id);
	    } else {
		this.empreendimento.setDataAlteracao(new Date());
		this.empreendimento.setIdUsuarioAlteracao(getContexto().getUsuario().getId());
		this.empreendimentoService.atualizar(this.empreendimento);
	    }

	    this.isDetalhamento = true;

	    MensagemUtil.exibirMensagemInformacao("global", MensagemUtil.getMensagem("registro_salvo_sucesso"));
	    
	} catch (ValidationException e) {
	    for (String key : e.getMensagens()) {
		MensagemUtil.exibirMensagemErro("global", MensagemUtil.getMensagem(key));
	    }
	} catch (Exception e) {
	    MensagemUtil.exibirMensagemErro("global", e.getMessage());
	}

	return null;

    }

    @Override
    public String voltar() {

	return PaginaEnum.CONSULTAR_EMPREENDIMENTO.getValue();

    }

    private void inicializarCombos() {

	this.listaRegionais = obterSelectItemPopulado(this.empreendimentoService.recuperarTodasRegionais(), "id", "nome");
	this.listaProgramas = obterSelectItemInicializado();
	this.listaSituacoes = obterSelectItemPopulado(true, SituacaoEmpreendimentoEnum.values());

    }

    public void limparCodigoXPLAN() {

	if (!SituacaoEmpreendimentoEnum.EM_EXECUCAO.getValue().equals(this.empreendimento.getSituacao())) {
	    this.empreendimento.setCodigoXplan(null);
	}

    }

    // <editor-fold desc="GETTERS AND SETTERS" defaultstate="collapsed">    
    public Empreendimento getEmpreendimento() {
	return empreendimento;
    }

    public void setEmpreendimento(Empreendimento empreendimento) {
	this.empreendimento = empreendimento;
    }

    public List<SelectItem> getListaProgramas() {
	return listaProgramas;
    }

    public void setListaProgramas(List<SelectItem> listaProgramas) {
	this.listaProgramas = listaProgramas;
    }

    public List<SelectItem> getListaRegionais() {
	return listaRegionais;
    }

    public void setListaRegionais(List<SelectItem> listaRegionais) {
	this.listaRegionais = listaRegionais;
    }

    public List<SelectItem> getListaSituacoes() {
	return listaSituacoes;
    }

    public void setListaSituacoes(List<SelectItem> listaSituacoes) {
	this.listaSituacoes = listaSituacoes;
    }

    public boolean isIsDetalhamento() {
	return isDetalhamento;
    }

    public void setIsDetalhamento(boolean isDetalhamento) {
	this.isDetalhamento = isDetalhamento;
    }

    public Long getIdEmpreendimento() {
	return idEmpreendimento;
    }

    public void setIdEmpreendimento(Long idEmpreendimento) {
	this.idEmpreendimento = idEmpreendimento;
    }
    // </editor-fold>
    
}
